home *** CD-ROM | disk | FTP | other *** search
- {
- BT>Hello All...
-
- BT> Ok once again I have reached a brick wall in my program... What I
- BT>was trying to do, was to make Word Wrap actully work... Turns out I was
- BT>barking up the wrong tree... If you have examples on how to do this... Th
- BT>please reply
- BT>and let me know...
-
- What I'm about to describe assumes you either have a loop of
- procedure/function that'll read in one line as it works on a line by
- line basis.... What I've always done (for wordwrap) is when entering a
- line, it stores each character into a holding string that'll contain the
- final line, you also have a string that contains the wrapped text, if
- the user presses space, you clear the string holding the wrapped text,
- and if they reach the end of the line, you erase as many characters as
- the length of the string holding the wrapped text...
-
- Example (untested):
-
- (uses the CRT unit)
- }
-
- Procedure GetLineWithWrap(var Line,Wrap: String);
- Const Cr=#13;
- BS=#8;
- EraseChar=#8+#32+#8;
-
- Var HoldLine,HoldWrap: String;
- Ch: Char;
- Count: Byte;
-
- Begin
- HoldWrap:='';
- HoldLine:='';
- if length(line)<>0 then begin
- HoldLine:=Line;
- Write(Line) end;
- Repeat
- While not keypressed do;
- Ch:=Readkey;
- If WhereX=80 and then begin
- For Count:=1 to Length(HoldWrap) Write(EraseChar);
- HoldLine:=Copy(HoldLine,1,Length(HoldLine)-Length(HoldWrap)-1);
- Line:=HoldLine;
- If Ch=#32 then Wrap:='' else Wrap:=HoldWrap+ch;
- Exit End;
- Case Ch of
- #13 : {nothing, but don't want it added to the line};
- #8 : If length(HoldLine)>0 then begin
- Write(EraseChar);
- If Length(HoldLine)>1 then
- HoldLine:=Copy(HoldLine,1,Length(HoldLine)-1)
- else HoldLine:='';
- If Length(HoldWrap)>1 then
- HoldWrap:=Copy(HoldWrap,1,Length(HoldWrap)-1)
- else HoldWrap:='';
- End;
- #32 : Begin
- HoldLine:=HoldLine+' ';
- HoldWrap:='' end;
- Else HoldLine:=HoldLine+Ch End;
- Until Ch=#13;
- Line:=HoldLine;
- Wrap:='';
- End;